package org.xyq.singleton.lazy;

/**
 * @author xuyanqing
 * @description ⭐⭐4.单例模式-懒汉式-静态内部类【推荐使用】
 * <p>
 * 原理：利用 JVM 类加载机制实现延迟加载和线程安全。
 * 静态内部类只有在外部类调用 getInstance() 时才会被加载，从而实现延迟加载效果，同时 JVM 保证类加载时的线程安全性。
 * <p>
 * 优缺点
 * 优点：
 * 实现延迟加载；
 * JVM 在加载类时保证线程安全，无需显式同步；
 * 代码简洁易懂。
 * 缺点：
 * 静态内部类的机制对初学者可能不够直观，需要理解类加载的原理。
 * @date 2025-02-14 15:52
 * @creed where there is a will,there is a way. yx
 */

public class StaticInnerClazz {
    private static class SingletonHolder {
        private static final StaticInnerClazz INSTANCE = new StaticInnerClazz();
    }

    public static StaticInnerClazz getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private StaticInnerClazz() {
        if (SingletonHolder.INSTANCE != null) {
            throw new RuntimeException("不允许非法访问");
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                System.out.println(StaticInnerClazz.getInstance());
            }).start();
        }
    }
}
